package kata04;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 处理weather.dat，找到温差最小的一天
 * 第二列  每天最高温度
 * 第三列  每天最低温度
 */
public class kata04 {

    public static void main(String[] args) {
        System.out.println(getDiffMinDay("weather.dat"));
    }

    public static String getDiffMinDay(String filePath){
        //读取文件buffer
        try(BufferedReader br = new BufferedReader(new InputStreamReader(Thread.currentThread().getContextClassLoader().getResourceAsStream(filePath), "UTF-8"))) {
            String strLine;
            List<String> diffs = new ArrayList<>();
            //一行一行的读取文本
            while ((strLine = br.readLine()) != null){
                //去除空格后字符长度 > 0
                if(strLine.trim().length() > 0){
                    //按 " " 分割字符串 得到数组
                    String[] strArray = strLine.split(" ");

                    //去除数组中的空格 将数组转换成 List
                    List<String> innerList = Stream.of(strArray).filter(innerStr -> {
                        return innerStr.trim().length() > 0;
                    }).collect(Collectors.toList());

                    //List不为空  并且  列表第一位必须为数字
                    if(innerList.size() > 0 && isNumeric(innerList.get(0))){
                        //将 -> 天 和 (最高温度-最低温度) 进行拼接
                        diffs.add(innerList.get(0) + "-" + (getNumber(innerList.get(1)) - getNumber(innerList.get(2))));
                    }
                }
            }

            if(diffs.size() > 0){
                //获取列表第一个作为中间值
                String[] resultArray = diffs.get(0).split("-");
                //中间值  第一个温差
                int mid = Integer.valueOf(resultArray[1]);
                //遍历温差列表
                for(int i = 1; i < diffs.size();i++){
                    String[] innerArray = diffs.get(i).split("-");
                    //当当前值 < mid -> mid = 当前值
                    if(Integer.valueOf(innerArray[1]) < mid){
                        resultArray = innerArray;
                        mid = Integer.valueOf(innerArray[1]);
                    }
                }
                //最后结果 天数
                return resultArray[0];
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }
    // 判断是否数字
   public static boolean isNumeric(String str){
        Pattern pattern = Pattern.compile("[0-9]*");
        Matcher isNum = pattern.matcher(str);
        if( !isNum.matches() ){
            return false;
        }
        return true;
    }
    // 去掉星号
    private static int getNumber(String str){
        return Integer.valueOf(str.replace("*",""));
    }

}
